package vista.ventanaTarea;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import modelo.tareas.Tarea;

/**
 * @author Natalia Stefania 
 */

public class EditarTareaPanel extends JFrame {
/**
 * natu el que tengas que contener la ventana anterior para notificar los cambios esta raro, fijate que ordene el codigo, 
 * y si tus ventanas usan frame, deberian ser frame y no un panel, ademas cree otro metodos y separe las acciones segun lo que hacen
 */
	private static final long serialVersionUID = 2997699410961866897L;
	// Variables  *********************************************************** //
	private JLabel nombre, importancia, estimacion, tipoTarea, finalizacionEstimada; // 
	private JTextField name, importance, estimacionAprox, tipoDeTarea, finEstimada; // 
	private JButton cancelar, aceptar;
	private Tarea tareaAEditar; 
	private VerTareas verTareas;
	private JPanel panel;

	// Constructor  ******************************************************** //
	public EditarTareaPanel(Tarea tarea, VerTareas verTareas)  {
		tareaAEditar= tarea; 
		this.verTareas = verTareas; 

		this.setTitle("Editar Tarea");	
		this.init();
		this.agregarComponentes();
		this.mostrarDatosEnPantalla ();
		this.panel.setLayout(new GridLayout(6,1));
		this.getContentPane().setLayout(new GridLayout(1,1));
		this.pack(); 
		this.setVisible(true); 

	}

	private void init() {
		panel = new JPanel();
		nombre = new JLabel ("     Nombre");
		name = new JTextField ();
		
		importancia = new JLabel ("     Importancia");
		importance = new JTextField ();
		
		finalizacionEstimada = new JLabel ("     Finalizacion Estimada");
		finEstimada = new JTextField ();
		
		estimacion = new JLabel ("     Estimacion");
		estimacionAprox = new JTextField ();
		
		tipoTarea = new JLabel ("     Tipo");
		tipoDeTarea = new JTextField (); 
		
		cancelar = new JButton("Cancelar"); 
		aceptar = new JButton ("Aceptar");
	}
	
	// Metodos  *********************************************************** //
	/**
	 * Inicializa los componentes
	 */
	public void agregarComponentes (){
		this.add(panel);
		this.panel.add(nombre);
		this.panel.add(name);
		
		this.panel.add(importancia);
		this.panel.add(importance);
		
		this.panel.add(finalizacionEstimada);
		this.panel.add(finEstimada);
		
		this.panel.add(estimacion);
		this.panel.add(estimacionAprox);
		
		this.panel.add(tipoTarea); 
		this.panel.add(tipoDeTarea);
		
		this.panel.add(aceptar);
		this.panel.add(cancelar);

		
		// El nombre de la tarea, su tipo y su fecha de finalizacion no se va a poder cambiar
		name.setEnabled(false);
		tipoDeTarea.setEnabled(false); 
		finEstimada.setEnabled(false); 
		
		//agrego las acciones a los buttons
		aceptar.addActionListener(new BotonAceptarListener());
		cancelar.addActionListener(new BotonCancelarListener());
	}

	/**
	 * Muestra en la interface los datos de la tarea que se ha seleccionado
	 */
	public void mostrarDatosEnPantalla (){
		name.setText(tareaAEditar.getNombre()); 
		
		importance.setText(Integer.toString(tareaAEditar.getImportancia())); 
		
		estimacionAprox.setText(Integer.toString(tareaAEditar.getEstimacion()));
		
		String date = tareaAEditar.getFinalizacionEstimada().toString();
		finEstimada.setText(date); 
		
		tipoDeTarea.setText(tareaAEditar.toString()); 
	}

	/**
	 * La funcionalidad de este boton es cerrar la ventana actual 
	 */
	public class BotonCancelarListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			EditarTareaPanel.this.dispose();
		}
	}
	
	/**
	 * Le digo a la tarea que opciones se va a poder cambiar y actualizo la lista de tareas. Despues de eso al 
	 * darle al boton aceptar va a cerrar la vetana.
	 */
	public class BotonAceptarListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			tareaAEditar.setImportancia(Integer.parseInt(importance.getText()));
			tareaAEditar.setEstimacion(Integer.parseInt(estimacionAprox.getText()));
			
			EditarTareaPanel.this.verTareas.getTableModel().getDataVector().removeAllElements();
			EditarTareaPanel.this.verTareas.getTableModel().actualizarme(EditarTareaPanel.this.verTareas.getProyectoObserver().getTareas());
			
			EditarTareaPanel.this.verTareas.getTablaDeTareas().updateUI();
			EditarTareaPanel.this.dispose();
		}
	}

	// GETTER & SETTER **************************************************** //
	public  JLabel getImportancia() {
		return importancia;
	}

	public  void setImportancia(JLabel importancia) {
		this.importancia = importancia;
	}

	public void setName(JTextField name) {
		this.name = name;
	}

	public JTextField getEstimacionAprox() {
		return estimacionAprox;
	}

	public void setEstimacionAprox(JTextField estimacionAprox) {
		this.estimacionAprox = estimacionAprox;
	}

	public void setTareaAEditar(Tarea tareaAEditar) {
		this.tareaAEditar = tareaAEditar;
	}

	public Tarea getTareaAEditar() {
		return tareaAEditar;
	}

}
